In order for a Dynamical system to be classified as chaotic it must:
Definition: A dynamical system $f$ on a phase space $X$ is said to be topologically mixing if for every two open sets $A$ and $B$ in $X$, there is $N$ sufficiently large such that $f^n(A)\cap B \neq \varnothing$ for all $n \geq N$.

Can use either Hamiltonian or Lagrangian
import RectTable as rect
from IPython.display import HTML
videoLength=1200
simargs={}
simargs['balls']={0:[0.5,0.5,1.5,0.5]}
simargs['playbackSpeed']=60
simargs['trace']=True
simargs['width']=2
simargs['height']=2
simargs['nBalls']=1
simargs['friction']=False
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
simargs['balls'][0]=[0.5,0.5,1.5*2**(1/2),0.5]
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.51,0.7]}
simargs['nBalls']=2
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
import random
nballs=30
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
# TODO: change this later after we figure out proper initial ball locations
simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
import Buminovich
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.501,0.7]}
simargs['nBalls']=2
simargs['trace']=True
simulation=Buminovich.Buminovich(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
nballs=30
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
# TODO: change this later after we figure out proper initial ball locations
simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
simulation=Buminovich.Buminovich(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
import circle
simargs['balls']={0:[0.5,0.5,1.5,0.5]}
simargs['nBalls']=1
simargs['trace']=True
simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.51,0.7]}
simargs['nBalls']=2
simargs['trace']=True
simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
nballs=30
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
# TODO: change this later after we figure out proper initial ball locations
simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
import Lorentz
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.501,0.7]}
simargs['nBalls']=2
simargs['trace']=True
simulation=Lorentz.Lorentz(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())
nballs=30
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
simulation=Lorentz.Lorentz(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())